home *** CD-ROM | disk | FTP | other *** search
/ Nejlepší hry / Nejlepsi hry.iso / hry / sea of chaos / sea_install.msi / _15C39AAA7726369D39812BD40F01CF6A / _9F4EED1C3DFA4ADE85CDEF2745DA9426 < prev    next >
Text File  |  2005-03-23  |  1KB  |  61 lines

  1. //water vertex shader:
  2. //adjusts alpha based on angle between surface normal and eye
  3. //1 directional light also applied
  4. //no pixel shader needed
  5. //Luke Lenhart
  6. //(C)2004-2005 Digipen Institute of Technology
  7.  
  8.  
  9. //world,view,projection transform
  10. float4x4 matWorldViewProj;
  11.  
  12. //camera position in world space
  13. float4 cameraPos;
  14.  
  15. //directional light
  16. float4 lgtDirection;
  17.  
  18. //ambient color of water
  19. float4 clrAmbient;
  20.  
  21. //shader input
  22. struct VS_INPUT
  23. {
  24.     float4 Pos : POSITION;
  25.     float4 Normal : NORMAL;
  26.     float4 Color : COLOR;
  27. };
  28.  
  29. //shader output
  30. struct VS_OUTPUT
  31. {
  32.     float4 Pos : POSITION;
  33.     float4 Color : COLOR;
  34.     float2 Tex0 : TEXCOORD0;
  35. };
  36.  
  37. //shader code
  38. VS_OUTPUT VShader(VS_INPUT In)
  39. {
  40.     VS_OUTPUT Out;
  41.     
  42.     //calc transformed position
  43.     Out.Pos=mul(matWorldViewProj,In.Pos);
  44.     
  45.     //tex coord generated from position
  46.     Out.Tex0=In.Pos*25;
  47.  
  48.     //calc directional light color
  49.     Out.Color=dot(In.Normal,lgtDirection)*In.Color+clrAmbient;
  50.  
  51.     //calc alpha based dot between vertex normal and vector from vertex to camera
  52.     float4 vecEyeToVertex=normalize(cameraPos-In.Pos);
  53.     
  54.     float alpha=(1.0f-dot(vecEyeToVertex,In.Normal));
  55.     
  56.     Out.Color.a=0.4f+pow(alpha,13.0f);
  57.  
  58.     //spit out the results
  59.     return Out;
  60. }
  61.